; 用有一种颜色来显示 welcome to masm!
assume cs:code, ds:data, ss:stack

data segment
     ;0123456789ABCDEF
  db 'welcome to masm!'
data ends

stack segment
  dw 2H, 24H, 71H, 0
stack ends
code segment

start:
  mov ax, data
  mov ds, ax
  mov bx,0
  
  mov ax, stack
  mov ss, ax
  mov sp, 0
  ; 显示缓冲区
  mov ax, 0B800H
  mov es, ax
  mov ax, 0A0H
  mov bp, ax
  
colorPop:
  pop si; 用来存放颜色
  mov cx, si
  ; 这条判断 => 如果有颜色就再循环，如果没有就退出
  jcxz exit
  mov cx, 10H
  mov bx, 0
print:
  ; 把data段中的字符给 显示缓冲器
  mov al, ds:[bx]
  inc bx
  ; 把颜色给 显示缓冲器
  mov es:[bp], al
  mov es:[bp+1], si
  add bp, 2
  
  loop print
  ; 换行
  add bp, 80H
  ; 换个颜色再循环一次
  jcxz colorPop
exit: 
  mov ax, 4c00H
  int 21H

code ends

end start